package com.my.adminservice.config.service;

import com.my.adminapi.config.domain.dto.*;
import com.my.adminapi.config.domain.vo.DictionaryDataVo;
import com.my.adminapi.config.domain.vo.DictionaryTypeVO;
import com.my.mycommondomain.domian.vo.BasePageVO;

import java.util.List;
import java.util.Map;

public interface ISysDictionaryService {

    /**
     * 新增字典类型
     * @param sysDictionaryType 请求入参
     * @return 主键id
     */
    Long addType(DictionaryTypeWriteReqDTO sysDictionaryType);

    /**
     * 字典列表
     * @param sysDictionaryTypeListReqDTO 请求参数
     * @return 字典列表
     */
    BasePageVO<DictionaryTypeVO> listType(DictionaryTypeListReqDTO sysDictionaryTypeListReqDTO);

    /**
     * 编辑字典类型
     * @param dictionaryTypeWriteReqDTO 请求DTO
     * @return id
     */
    Long editType(DictionaryTypeWriteReqDTO dictionaryTypeWriteReqDTO);

    /**
     * 新增字典数据
     * @param dictionaryDataWriteDTO 入参
     * @return id
     */
    Long addData(DictionaryDataWriteReqDTO dictionaryDataWriteDTO);

    /**
     * 查询字典数据列表
     * @param dictionaryDataListReqDTO 入参
     * @return List
     */
    BasePageVO<DictionaryDataVo> dataList(DictionaryDataListReqDTO dictionaryDataListReqDTO);

    /**
     * 编辑字典数据
     * @param dto 入参
     * @return id
     */
    Long editData(DictionaryDataEditReqDTO dto);

    /**
     * 远程调用根据typeKey查找字典数据
     * @param typeKey 业务主键
     * @return 列表
     */
    List<DictionaryDataDTO> selectDictDataByType(String typeKey);

    /**
     * 通过多个key查询数据(远程调用)
     * @param typeKeys
     * @return
     */
    Map<String, List<DictionaryDataDTO>> selectDictDataByTypes(List<String> typeKeys);

    /**
     * 通过数据键来查询字典数据
     * @param dataKey 数据键
     * @return DictionaryDataDTO
     */
    DictionaryDataDTO getDicDataByKey(String dataKey);

    /**
     * 通过多个key查询数据(远程调用)
     * @param dataKeys 入参
     * @return 列表
     */
    List<DictionaryDataDTO> getDicDataByKeys(List<String> dataKeys);
}
